Computer networks necessitate the provision of various communication protocols to transmit and receive data. Typically, a computer network comprises a plurality of devices, such as computers, printers, and other computer peripherals, communicatively connected together. Data is transferred between each of the devices through data packets which are communicated through the network using a communication protocol standard. Examples of the communication protocol standards include Internet Protocol (IP), Point-to-Point Protocol (PPP), and Transmission Control Protocol (TCP). Each network device includes a combination of hardware and software that translates protocols and process data. For example, an Ethernet controller connects multiple computers on a wired network.
A conventional Ethernet controller is connected to a single host and provides network connectivity based on standard Ethernet protocol with various performance features, such as Tx/Rx Offload (Checksum offloads, address filtering, VLAN filtering etc). In the Ethernet protocol, a media access control (MAC) layer acts as an interface between a Logic Link Layer and Physical (PHY) Layer. The MAC layer, thus, transforms data packets from the host processor (also referred to as host herein) and sends the data packets to the physical (PHY) layer, typically using Media Independent Interfaces, which serialize the data and transmit on the wired network. Similarly, incoming data packets are processed and sent to the host via offload engines.
More recently, multiple operating systems on single host or multiple host systems are being developed. When multiple operating systems are developed, a virtualization intermediary (VI), such as virtual machine monitor (VMM) or Hypervisor, is also implemented to enable multiple different operating systems. The VMM enables the sharing of the peripherals generally connected to an I/O controller. However, such software based virtualization solutions cause high latencies and thus sharing of a network device with the software solution can become a bottleneck in the overall system performance.
When there are multiple hosts connected to a shared peripheral pool, the hosts either access the peripherals on a sequential basis or each host is connected to a dedicated peripheral. While sequential accessing of shared peripherals affects the system performance, having dedicated peripherals for each of the hosts may add up to the overall cost of the system and increase in the overall power consumption.